package com.delio.client.produccion.recetas;

import java.util.List;

import com.delio.client.produccion.detallerecetas.DetalleReceta;
import com.extjs.gxt.ui.client.data.BaseFilterPagingLoadConfig;
import com.extjs.gxt.ui.client.data.BaseListLoader;
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.FilterPagingLoadConfig;
import com.extjs.gxt.ui.client.data.ListLoadResult;
import com.extjs.gxt.ui.client.data.ListLoader;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoader;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class Recetas{

private static RecetaServiceAsync rs = GWT.create(RecetaService.class);
public static PagingLoader<PagingLoadResult<ModelData>> loader;
public static ListStore<BeanModel> store;
public static ListStore<ModelData> storeCombo;
public static ListLoader<ListLoadResult<ModelData>> loaderCombo;
public static Integer receta_id;
	

	public static void getPaginate() {
		RpcProxy<PagingLoadResult<Receta>> proxy = new RpcProxy<PagingLoadResult<Receta>>() {
	
			@Override
			protected void load(Object loadConfig,
			      AsyncCallback<PagingLoadResult<Receta>> callback) {
				rs.paginateReceta((FilterPagingLoadConfig) loadConfig, callback);  
			}  
	    };
	    loader = new BasePagingLoader<PagingLoadResult<ModelData>>(proxy, new BeanModelReader()){  
	        @Override  
	        protected Object newLoadConfig() {  
	          BasePagingLoadConfig config = new BaseFilterPagingLoadConfig();  
	          return config;  
	        }  
	      };  
	    loader.setRemoteSort(true);  
	    store = new ListStore<BeanModel>(loader);
	}
	
	
	public static void getStore(){
	
	RpcProxy<List<Receta>> proxy = new RpcProxy<List<Receta>>(){
	protected void load(Object loadConfig, AsyncCallback<List<Receta>> callback){
	    rs.ListarRecetas(callback);
	 }
		};
	loaderCombo = new BaseListLoader<ListLoadResult<ModelData>>(proxy, new BeanModelReader());
	storeCombo = new ListStore<ModelData>(loaderCombo);
	loaderCombo.load();
	
	}


 public static void guardar(final Receta r){
  rs.guardar(r, new AsyncCallback<Boolean>(){

	@Override
	public void onFailure(Throwable caught) {
		MessageBox.alert("Error", "No pudo guardar", null);			
	}

	@Override
	public void onSuccess(Boolean result) {
       if(!result)
        MessageBox.alert("Error", "No se guardo correctamente", null);
	}
  });
 }
 
 public static void guardar(Receta r, List<DetalleReceta> dr) {
	rs.guardar(r, dr, new AsyncCallback<Boolean>(){
		@Override
		public void onFailure(Throwable caught) {
			MessageBox.alert("Error", "No pudo guardar", null);			
		}

		@Override
		public void onSuccess(Boolean result) {
	       if(result){
	    	   MessageBox.alert("Guardado", "Se guardo Correctamente", null);
	    	  // Articulos.loaderCombo.load();
	       }else{ 
	    	   MessageBox.alert("Error", "No se guardo correctamente", null);
	       }
		}
     });
   }


 public static void actualizar(Receta r){
  rs.actualizar(r, new AsyncCallback<Boolean>(){

   @Override
   public void onFailure(Throwable caught) {
	   MessageBox.alert("Error", "Error en la acutalizacion", null);	 
   }	
	 
   public void onSuccess(Boolean result){
	 if(result){
	   MessageBox.alert("Actualizado","Se actualizo Correctamente", null);
	 }else{
	   MessageBox.alert("Error", "No se actualizo Correctamente", null);	 
	 }
	}

  });
 }

 public static void eliminar(Integer id){
   rs.eliminar(id, new AsyncCallback<Boolean>(){
	
	 @Override
	 public void onFailure(Throwable caught){
		 MessageBox.alert("Error", "Error en la Eliminacion", null);
	 }
	 
	 public void onSuccess(Boolean result){
		 if(result){
		   MessageBox.alert("Eliminado","Se elimino Correctamente", null); 
		 }else{
		   MessageBox.alert("Error", "No se elimino Correctamente", null);	 
		 } 
	 }

  });
 }
}
